﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;//提供各种各样支持 COM interop 及平台调用服务的成员，此命名空间提供了多种类别的功能;[DllImport("user32.dll")];用里面的API函数;
using System.Threading;
using System.Windows.Forms;


namespace HYQuick
{
    [Serializable]//序列化
    internal class HYQuickCommonObject //常见对象
    {
        [DllImport("user32.dll", EntryPoint = "keybd_event")]  //调用DllImport库中的方法->System.Runtime.InteropServices
        public static extern void keybd_event(
            byte bVk,        //虚拟键值
            byte bScan,      //一般为0
            int dwFlags,     //这里是整数类型 0为按下，2为释放
            int dwExtraInfo  //这里是整数类型 一般情况下设为0
        );

        [DllImport("user32.dll")] //System.Runtime.InteropServices
        private static extern int GetWindowRect(IntPtr hwnd, out Rect IpRect);//该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。
        public struct Rect    //lpRect：指向一个RECT结构的指针，该结构接收窗口的左上角和右下角的屏幕坐标。
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }
        private IntPtr currentWindowPtr;
        private bool isGlobal;

        public HYQuickCommonObject(IntPtr windowPtr,bool isGlobal)
        {
            currentWindowPtr = windowPtr;
            this.isGlobal = isGlobal;
        }

        public Rect GetWindowRect()
        {
            Rect lpRect;
            if(isGlobal)
            {
                var rect = Screen.GetWorkingArea(new Point(0, 0));//System.Windows.Forms;检索包含指定的矩形的最大一部分的显示器的工作区。
                lpRect.Left = rect.Left;
                lpRect.Right = rect.Right;
                lpRect.Top = rect.Top;
                lpRect.Bottom = rect.Bottom;
            }
            else
            {
                GetWindowRect(currentWindowPtr, out lpRect);
            }
            return lpRect;
        }

        public String GetSelection
        {
            get
            {
                keybd_event((byte)Keys.LControlKey, 0, 0, 0); //按下  System.Windows.Forms Keys.LControlKey->左ctrl键
                keybd_event((byte)Keys.C, 0, 0, 0);           //按下  System.Windows.Forms Keys.LControlKey->c键
                keybd_event((byte)Keys.LControlKey, 0, 2, 0); //释放  System.Windows.Forms
                keybd_event((byte)Keys.C, 0, 2, 0);           //释放  System.Windows.Forms
                Thread.Sleep(10);           //Thread->System.Threading;主线程休眠10毫秒
                return Clipboard.GetText(); //System.Windows.Forms
            }
        }

       public void Call(String cmd,String arg)
        {
            Process.Start(cmd, arg); //打开cmd；通过指定应用程序的名称和一组命令行参数来启动一个进程资源，并将该资源与新的 Process 组件相关联。
        }
    }
}
